package main

import (
	"context"
	"fmt"
	v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
	"k8s.io/client-go/kubernetes/scheme"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {
	// 获取config，从本机中获取kubeconfig的配置文件。
	config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
	if err != nil {
		panic(err)
	}

	config.GroupVersion = &v1.SchemeGroupVersion
	// 设置反序列化
	config.NegotiatedSerializer = scheme.Codecs
	// 指定ApiPath,即/apis/apiextensions.k8s.io/v1/customresourcedefinitions，参考https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26
	config.APIPath = "apis"

	// 根据配置文件，获取rest客户端
	client, err := rest.RESTClientFor(config)
	if err != nil {
		panic(err)
	}

	// 指定接收参数
	result := &v1.CustomResourceDefinitionList{}

	// 通过rest client获取deployments的信息
	// 这里就需需要执行namespace了，因为crd的作用域不是namespace级别的
	err = client.Get().
		Resource("customresourcedefinitions"). // 指定要获取的资源对象
		Do(context.TODO()).                    // 执行
		Into(result)                           // 将结果写入result
	if err != nil {
		panic(err)
	}

	for _, dp := range result.Items {
		fmt.Println(dp.Name)
	}
}
